package tutorial.main.vista;

import tutorial.main.R;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.LayoutInflater;
import android.preference.PreferenceManager;
import android.text.format.DateFormat;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.ToggleButton;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;

import tutorial.entidades.Evento;
import tutorial.entidades.ComparatorTime;
import tutorial.entidades.ComparatorTipo;

public class GrillaAdapter extends BaseAdapter{

	private Context mContext;
	
	private ArrayList<Evento> eventos;
	private ArrayList<Evento> eventosFull; // Guardo una copia
	
	private boolean NoFiltraConexion = true;
	private boolean NoFiltraDesConexion = true;
	
	private LayoutInflater inf;
	
    public GrillaAdapter(Context c) 
    {
        mContext = c;        
		inf = LayoutInflater.from(mContext);
		eventos = new ArrayList<Evento>();
		eventosFull = new ArrayList<Evento>();
    }

    /**
     * Solo usar para los eventos traidos desde la DB
     * @param ev
     */
    public void setEventos(ArrayList<Evento> ev)
    {
		eventos = new ArrayList<Evento>();
		eventos.addAll(ev);
		eventosFull = new ArrayList<Evento>();
		eventosFull.addAll(ev);    	
    }
    @Override
	public int getCount() 
    {
		return eventos.size();
	}
    
	public int getFullCount() 
    {
		return eventosFull.size();
	}

	@Override
	public Object getItem(int arg0) {
		return eventos.get(arg0);
	}

	@Override
	public long getItemId(int arg0) {
		return arg0;
	}
	public Evento getEvento(int position) 
	{
			Evento evento = (Evento) getItem(position);
			return evento;
	}

	public void ResetearEstados()
	{
		eventos = null;
		eventos = new ArrayList<Evento>();
		eventos.addAll(eventosFull);
	}
	
	public void OrdenarSegunPreferencias()
	{
		SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(mContext);
		if(eventos.size()>0)
		{
			Log.v("GrillaAdapter","Oredn: "+p.getString("pref_orden",mContext.getString(R.string.f_seleccion_orden_momento)));
			if(p.getString("pref_orden",mContext.getString(R.string.f_seleccion_orden_momento)).equals(mContext.getString(R.string.f_seleccion_orden_momento))==true)
			{
				ResetearEstados();
			}
			if(p.getString("pref_orden",mContext.getString(R.string.f_seleccion_orden_momento)).equals(mContext.getString(R.string.f_seleccion_orden_tc))==true)
			{
				Collections.sort(eventos,new ComparatorTipo());
			}
		}
	}
	
	public void FiltrarSegunPreferencias()
	{
			ResetearEstados();
			
			Log.v("Adapter","Cantidad de eventos Full: "+eventosFull.size());
			Log.v("Adapter","Cantidad de eventos: "+eventos.size());
			
			SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(mContext); 
			
		
			Iterator<Evento> it = this.eventos.listIterator();
			while (it.hasNext()) 
			{
				Evento a = (Evento)it.next();
				// Muestro conexiones ?
				if(p.getBoolean("pref_con_si_conn",true)==false && a.getEstadoConetado()==true)
				{
					Log.v("Filtro","Removi por Conexion 1");
					it.remove();
				}
				// Muestro Desconexiones ?
				if(p.getBoolean("pref_con_si_desc",true)==false && a.getEstadoConetado()==false)
				{
					Log.v("Filtro","Removi por DesConexion 2");
					it.remove();
				}
				// Muestro 3G - MOBILE ?
				if(p.getBoolean("pref_con_3g",true)==false && a.getTipoConexion().toUpperCase().equals("MOBILE"))
				{
					Log.v("Filtro","Removi por MOBILE 3");
					it.remove();
				}
				// Muestro WIFI ?
				if(p.getBoolean("pref_con_wifi",true)==false && a.getTipoConexion().toUpperCase().equals("WIFI"))
				{
					Log.v("Filtro","Removi por WiFi 4");
					it.remove();
				}
				// Muestro Sincronizados ?
				if(p.getBoolean("pref_sync",true)==false && a.getSincronizado()==true)
				{
					Log.v("Filtro","Removi por Sync 5");
					it.remove();
				}
			}
			
			Log.v("Adapter","Cantidad de eventos Full: "+eventosFull.size());
			Log.v("Adapter","Cantidad de eventos: "+eventos.size());
					
	}
	
	
    // create a new ImageView for each item referenced by the Adapter
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    {
    	Log.i("GrillaAdapter","+++ ghGrillaAdapter.getView Position:"+position+" de "+eventos.size());
    	GrillaHolder holder=null;
    	
        if (convertView == null)  // if it's not recycled, initialize some attributes 
        { 	
        	//Initialize item's attributes
        	convertView = inf.inflate(R.layout.item, null);
        	holder = new GrillaHolder();
            holder.info = (TextView) convertView.findViewById(R.id.item_texto);
            holder.icono = (ImageView) convertView.findViewById(R.id.Item_icono);
            holder.icono_sync = (ImageView) convertView.findViewById(R.id.item_icono_sync);
            holder.times = (TextView) convertView.findViewById(R.id.item_times);            
            holder.btnTilde = (ToggleButton) convertView.findViewById(R.id.tildeEventoEliminar);
            convertView.setTag(holder);
        } 
        else 
        {
            holder = (GrillaHolder) convertView.getTag();
        }
        if(eventos!= null && eventos.size()>0)
        {
        	if(eventos.size()>position)
        	{
        		//Load evento data into item list		
        		Evento ev=eventos.get(position);  
        		// Nombre 
        		holder.info.setText(eventos.get(position).getTipoConexion());
        		// Fecha y Hora
        		long f = ev.getMomento();
        		CharSequence fc = DateFormat.format("dd/M/yyyy kk:mm:ss", f);
        		holder.times.setText(fc);
        			//System.out.println("AAAAAAAAAAAAAA Position:"+position);
        		//-----------------------------------------------
    
        		holder.icono_sync.setImageBitmap(BitmapFactory.decodeResource(mContext.getResources(), R.drawable.lista_sync));
        		if(eventos.get(position).getSincronizado()==true)
        		{
        			// Ya fue sincronizado
        		      // Icono
        		      holder.icono_sync.setImageBitmap(BitmapFactory.decodeResource(mContext.getResources(),R.drawable.lista_sync_si));

        		}
        		else
        		{
        			// No fue sincronizado todavia
        			// Icono
      		      	holder.icono_sync.setImageBitmap(BitmapFactory.decodeResource(mContext.getResources(),R.drawable.lista_sync));
        		}
    		    //Esta Conectado
    		    
    		    if(eventos.get(position).getEstadoConetado()==true)
        		{
        			  // Estoy conectado
        		      // Icono
        		      holder.icono.setImageBitmap(BitmapFactory.decodeResource(mContext.getResources(),R.drawable.lista_on));

        		}
        		else
        		{
        			// No Estoy conectado
        			// Icono
      		      	holder.icono.setImageBitmap(BitmapFactory.decodeResource(mContext.getResources(),R.drawable.lista_off));
        		}
    		    if(GrillaDeEstados.UNDER_DELETING)    	            
        		{ 
    		    	holder.btnTilde.setVisibility(android.view.View.VISIBLE);
        		}
        		else        		
        		{
        			holder.btnTilde.setVisibility(android.view.View.GONE);
        		}
    		    
        	}
        }
        
        return convertView;
    }
    
    // Agrega a la lista un evento
   public void AgregarConexion(Evento ev)
   {    	
	   eventos.add(ev);
	   eventosFull.add(ev);
   }
         
}
